const rateLimit = require('express-rate-limit');

/**
 * 完整的限流配置
 * 用于保护各类敏感接口
 */

/**
 * 支付接口限流 - 1分钟10次
 */
const paymentLimiter = rateLimit({
  windowMs: 1 * 60 * 1000,
  max: 10,
  message: { success: false, message: '支付请求过于频繁，请稍后再试' },
  standardHeaders: true,
  legacyHeaders: false
});

/**
 * 短信验证码限流 - 1分钟1次
 */
const smsLimiter = rateLimit({
  windowMs: 1 * 60 * 1000,
  max: 1,
  message: { success: false, message: '发送过于频繁，请1分钟后再试' },
  standardHeaders: true,
  legacyHeaders: false
});

/**
 * 短信小时限流 - 1小时5次
 */
const smsHourlyLimiter = rateLimit({
  windowMs: 60 * 60 * 1000,
  max: 5,
  message: { success: false, message: '今日验证码发送次数已达上限，请明天再试' },
  standardHeaders: true,
  legacyHeaders: false
});

/**
 * 登录接口限流 - 5分钟5次
 */
const loginLimiter = rateLimit({
  windowMs: 5 * 60 * 1000,
  max: 5,
  message: { success: false, message: '登录尝试次数过多，请5分钟后再试' },
  standardHeaders: true,
  legacyHeaders: false
});

/**
 * 通用API限流 - 1分钟60次
 */
const apiLimiter = rateLimit({
  windowMs: 1 * 60 * 1000,
  max: 60,
  message: { success: false, message: '请求过于频繁' },
  standardHeaders: true,
  legacyHeaders: false
});

/**
 * 敏感操作限流 - 1分钟3次（删除、批量操作）
 */
const sensitiveLimiter = rateLimit({
  windowMs: 1 * 60 * 1000,
  max: 3,
  message: { success: false, message: '操作过于频繁，请稍后再试' },
  standardHeaders: true,
  legacyHeaders: false
});

module.exports = {
  paymentLimiter,
  smsLimiter,
  smsHourlyLimiter,
  loginLimiter,
  apiLimiter,
  sensitiveLimiter
};

